//引入Vue
import Vue from 'vue';
import VueRouter from 'vue-router';
//使用插件
Vue.use(VueRouter);
import routes from './routes'
import store from '../store'
//对外默认暴露一个VueRouter的实例
//在路由配置的时候，对外暴露一个Router类的一个实例
const router = new VueRouter({
     //配置路由
     routes,
     scrollBehavior(to, from, savedPosition) {
          // 始终滚动到顶部
          return { y: 0 }
     },
});
// 全局路由守卫 前置路由守卫
router.beforeEach(async (to, from, next) => {
     //获取到仓库中的token 查看是否登陆
     let token = localStorage.getItem("token")
     //获取仓库中的用户信息 查看是否有用户信息
     let user = store.state.user.userInfo.name;
     //登陆的情况
     if (token) {
          if (to.path == '/login') {
               //如果跳转登陆页面 则跳转到home
               next("/home")
          } else {
               //不是跳转到登陆页面 则放行 
               //但页面刷新后 仓库中的用户信息没了(因为vuex不是持久化存储) 所以要重新派发请求 拿用户信息
               //判断仓库中的用户信息是否为空 如果为空 则重新派发请求 拿用户信息
               if (user) {
                    next();
               } else {
                    try {
                         await store.dispatch("user/getUserInfo")
                         next()
                    } catch (error) {
                         //token过期了 没有获取到用户信息 则重新登陆
                         alert(error.message)
                    }
               }
          }
     } else {
          //没有登陆的情况
          //点击的是购物车 或者是添加购物车
          if (to.path == '/shopcar' || to.path == '/addshopcarsuccess') {
               next(`/login?toPath=${to.path}`)
          } else {
               next()
          }
     }
})
export default router;
